home *** CD-ROM | disk | FTP | other *** search
/ Atari Forever 4 / Atari Forever 4.zip / Atari Forever 4.iso / PD_THEMA / EDITOREN / 7UP_PD / VAPROTO.H < prev    next >
C/C++ Source or Header  |  1998-03-14  |  14KB  |  359 lines

  1. /*
  2.  * @(#) Gemini\vaproto.h
  3.  * @(#) Stefan Eissing, 21. August 1993
  4.  *
  5.  *
  6.  * Beschreibung: Definition der Nachrichten des Venus <-> Accessory
  7.  * Protokolls
  8.  *
  9.  * 07.12.: AV_PATH_UPDATE, AV_WHAT_IZIT, AV_DRAG_ON_WINDOW eingebaut.
  10.  */
  11.  
  12. #ifndef __vaproto__
  13. #define __vaproto__
  14.  
  15. /* Message-Nummern für das xAcc-Protokoll von Konrad Hinsen
  16.  * Venus gibt bei ACC_ID "VENUS.APP" und Gemini gibt "GEMINI.APP"
  17.  * zurück. Gemini unterstützt xAcc der Stufe 0.
  18.  */
  19. #define ACC_ID        0x400
  20. #define ACC_OPEN    0x401
  21. #define ACC_CLOSE    0x402
  22. #define ACC_ACC        0x403
  23.  
  24. /* Message-Nummern für die Kommunikation zwischen Venus und
  25.  * verschiedenen Accesories.
  26.  * Sollten in Nachrichten Pfade oder Dateinamen vorkommen, so
  27.  * muß immer der absolute Pfad angegeben werden (also mit Laufwerk)
  28.  * und die Laufwerksbuchstaben müssen Großbuchstaben sein. Pfade enden
  29.  * IMMER mit einem Backslash!
  30.  *
  31.  * Nachrichten von Venus beginnen mit VA (Venus -> Accessory).
  32.  * Nachrichten an Venus beginnen mit AV (Accessory -> Venus).
  33.  *
  34.  * Mit AV_PROTOKOLL kann jedes Acc nachfragen, welche Nachrichten
  35.  * verstanden werden (Dies ist ja bei VENUS und GEMINI 
  36.  * unterschiedlich! Es wäre schön, wenn auch andere Programme auf
  37.  * dieses Protokoll reagieren würden. Zumindest AV_SENDKEY ist
  38.  * sicher leicht zu implementieren und ist die einzige Methode, wie
  39.  * über Nachrichten Tastaturdrücke simuliert werden können.
  40.  *
  41.  * Unter normalem TOS fragt dazu ein Accessory, wenn es eine
  42.  * AC_CLOSE-Nachricht vom AES erhalten hat, die Applikation 0
  43.  * mit AV_PROTOKOLL, ob sie etwas davon versteht.
  44.  * Unter MultiTOS muß aber das Programm nicht mehr die ID 0
  45.  * haben, zudem kommt es (fast) nicht mehr zu AC_CLOSE-Nachrichten.
  46.  * Es können auch nicht nur Accessories, sondern auch normale
  47.  * Programme mit Gemini kommunizieren wollen. Was tun?
  48.  * Wenn es mehr als eine Hauptapplikation geben kann, dann sollte
  49.  * das Programm/Accessory versuchen, mit GEMINI Kontakt aufzunehmen.
  50.  * Die ID kann ja mit appl_find ermittelt werden. Scheitert dies, so
  51.  * kann noch nach AVSERVER oder dem Inhalt der (AES-)Environmentvariable
  52.  * AVSERVER gesucht werden. Besonders die letzte Möglichkeit erlaubt
  53.  * eine leichte Konfiguration "von außen". Die neuen Versionen der
  54.  * Library VAFUNC von Stephan Gerle (in gutsortierten Mailboxen
  55.  * erhältlich) verfahren fast genauso.
  56.  */
  57.  
  58. /* AV_PROTOKOLL: Mit dieser Nachrichtennummer sollte man bei 
  59.  * anderen Applikationen und auch VENUS/GEMINI nachfragen, ob
  60.  * und welche Nachrichten sie versteht.
  61.  */
  62. #define AV_PROTOKOLL        0x4700
  63. /*
  64.  * Word 6+7: Pointer auf den Accessorynamen, wie er bei
  65.  *           appl_find benutzt werden muß; also 8 Zeichen lang
  66.  *           nullterminiert (char name[9]).
  67.  * Die Bits in den Worten 3, 4 und 5 haben folgende Bedeutung:
  68.  * Word 3:
  69.  * Bit 0:        (VA_SETSTATUS)
  70.  * Bit 1:        (VA_START)
  71.  * Alle anderen Bits sind für Erweiterungen reserviert und sollten
  72.  * daher mit 0 vorbesetzt werden. Das gilt natürlich auch für die
  73.  * Bits in den Worten 4 und 5.
  74.  */
  75.  
  76. /* VA_PROTOSTATUS: Dem Sender von AV_PROTOKOLL wird mitgeteilt, daß
  77.  * der Empfänger etwas von diesem Protokoll weiß. Die Worte 3-7 des
  78.  * Nachrichtenpuffers enthalten die Information, welche Nachrichten
  79.  * verstanden werden. Gesetzte Bits stehen dafür, daß eine Nachricht
  80.  * (Nachrichtengruppe) verstanden werden. 
  81.  */
  82. #define VA_PROTOSTATUS        0x4701
  83. /*
  84.  * Word 6+7: Pointer auf den Programmnamen, wie er bei
  85.  *           appl_find benutzt werden muß; also 8 Zeichen lang
  86.  *           nullterminiert (char name[9]).
  87.  * Die Bits in den Worten 3, 4 und 5 haben folgende Bedeutung:
  88.  * Word 3:
  89.  * Bit 0        (AV_SENDKEY)
  90.  * Bit 1        (AV_ASKFILEFONT)
  91.  * Bit 2        (AV_ASKCONFONT, AV_OPENCONSOLE)
  92.  * Bit 3        (AV_ASKOBJECT)
  93.  * Bit 4        (AV_OPENWIND)
  94.  * Bit 5        (AV_STARTPROG)
  95.  * Bit 6        (AV_ACCWINDOPEN, AV_ACCWINDCLOSED)
  96.  * Bit 7        (AV_STATUS, AV_GETSTATUS)
  97.  * Bit 8        (AV_COPY_DRAGGED)
  98.  * Bit 9        (AV_PATH_UPDATE, AV_WHAT_IZIT, AV_DRAG_ON_WINDOW)
  99.  * Bit 10        (AV_EXIT)
  100.  * 
  101.  * Alle anderen Bits sind für Erweiterungen reserviert und sollten
  102.  * daher mit 0 vorbesetzt werden. Das gilt natürlich auch für die
  103.  * Bits in den Worten 4 und 5.
  104.  *
  105.  * AV_SENDKEY kann sicher jeder leicht in seine Programme einbauen.
  106.  * Bei AV_OPENWIND könnte ein Hauptprogramm auch seine "normale"
  107.  * Routine zum Öffnen eines Dokumentes anwerfen und dabei den
  108.  * übergebenen Pfad benutzen. Dies ist zusammen mit der Benutzung
  109.  * von TreeView sicher eine einfache Art, Dateien aus anderen Ordnern
  110.  * oder Laufwerken zu laden.
  111.  */
  112.  
  113. /* AV_GETSTATUS: Ein Accessory erfragt bei Venus den aktuellen
  114.  * Status, den es Venus mit AV_STATUS mal gegeben hat.
  115.  */
  116. #define AV_GETSTATUS        0x4703
  117.  
  118. /* AV_STATUS: Ein Accessory kann Venus seinen Status mitteilen,
  119.  * der dann von Venus im INF-File gespeichert wird und mit
  120.  * AV_GETSTATUS wieder abgerufen werden kann.
  121.  * Zuvor MUSS es sich aber mit AV_PROTOKOLL anmelden!
  122.  * Word 3+4: Pointer auf einen String, der keine Steuerzeichen
  123.  *           enthalten darf und nicht länger als 256 Zeichen
  124.  *           sein darf. Dieser Pointer darf allerdings NULL sein.
  125.  */
  126. #define AV_STATUS            0x4704
  127.  
  128. /* VA_SETSTATUS: Venus teilt dem Accessory den abgespeicherten
  129.  * Status bei Nachfrage durch AV_GETSTATUS mit. Dieser kann dann 
  130.  * von einem Accessory gesetzt werden.
  131.  * Word 3+4: Pointer auf einen String, der keine Steuerzeichen
  132.  *           enthält.
  133.  *           Dieser Pointer kann allerdings NULL sein, dann war
  134.  *           kein Status gespeichert.
  135.  */
  136. #define VA_SETSTATUS        0x4705
  137.  
  138. /* AV_SENDKEY: Ein Acc sendet VENUS/GEMINI einen Tastaturevent, den
  139.  * es selber vielleicht nicht versteht.
  140.  * Word 3 = Tastaturstatus                 ev_mmokstate
  141.  * Word 4 = Scancode der gedrückten Taste  ev_mkreturn
  142.  */
  143. #define    AV_SENDKEY            0x4710
  144.  
  145. /* VA_START: Accessory wird aktiviert. Word 3 + 4 enthalten einen
  146.  * Pointer auf eine Kommandozeile, der auch NULL sein kann.
  147.  * In der Kommandozeile stehen Pfade oder Dateinamen.
  148.  */
  149. #define VA_START            0x4711
  150.  
  151. /* AV_ASKFILEFONT: Frage nach dem eingestellten Zeichensatz
  152.  * für Dateinamen.
  153.  */
  154. #define AV_ASKFILEFONT        0x4712
  155.  
  156. /* VA_FILEFONT: Gibt den derzeit eingestellten Zeichensatz.
  157.  * Word 3 = Dateifontnummer (font id)
  158.  * Word 4 = Dateifontgröße (in points)
  159.  */
  160. #define VA_FILEFONT            0x4713
  161.  
  162. /* (Nur Gemini) AV_ASKCONFONT: Frage nach dem eingestellten 
  163.  * Zeichensatz für das Console-Fenster.
  164.  */
  165. #define AV_ASKCONFONT        0x4714
  166.  
  167. /* VA_CONFONT: Gibt den derzeit eingestellten Zeichensatz.
  168.  * Word 3 = Consolefontnummer (font id)
  169.  * Word 4 = Consolefontgröße (in points)
  170.  */
  171. #define VA_CONFONT            0x4715
  172.  
  173. /* AV_ASKOBJECT: Fragt nach dem derzeit selektiertem Objekt.
  174.  * Es wird der Name des derzeit selektierten Objektes zurückgegeben.
  175.  * Ist kein Objekt selektiert, so ist der String leer.
  176.  * Sind mehrere Objekte selektiert, so sind ihre Namen durch Leer-
  177.  * zeichen getrennt.
  178.  */
  179. #define AV_ASKOBJECT    0x4716
  180.  
  181. /* VA_OBJECT: Gibt Namen der derzeit selektierten Objekte.
  182.  * Aufbau wie bei VA_START
  183.  */
  184. #define VA_OBJECT        0x4717
  185.  
  186. /* (Nur Gemini)AV_OPENCONSOLE: Venus soll das Console-Fenster öffnen.
  187.  * Ist es schon offen, so wird es nach vorne gebracht. Diese Aktion
  188.  * ist vor allen Dingen sinnvoll, wenn ein Accessory ein TOS-Programm
  189.  * mittels der system()-Funktion starten will (Warnung: Auf keinen
  190.  * Fall darf ein GEM-Programm von einem Accessory via system() 
  191.  * gestartet werden! (siehe auch AV_STARTPROG)
  192.  * Auch sollte diese Nachricht nur auf ausdrücklichen Wunsch des
  193.  * Benutzers gebraucht werden, da es ihn sonst nur verwirren kann.
  194.  *
  195.  * ACHTUNG: Diese Nachricht steht nur in Gemini.app zur Verfügung.
  196.  */
  197. #define AV_OPENCONSOLE    0x4718
  198.  
  199. /* VA_CONSOLEOPEN: Gibt zurück, ob das Console-Fenster nach vorne
  200.  * gebracht worden ist. Word 3 == 0 (nein) != 0 (ja)
  201.  */
  202. #define VA_CONSOLEOPEN    0x4719
  203.  
  204. /* AV_OPENWIND: Venus soll ein Datei-Fenster öffnen.
  205.  * Dies sollte auch nur geschehen, wenn die Ursache für den
  206.  * Benutzer ersichtlich ist.
  207.  * Word 3+4 (Pointer) Pfad für das Fenster (s.o.).
  208.  * Word 5+6 (Pointer) Wildcard für darzustellende Dateien.
  209.  */
  210. #define AV_OPENWIND        0x4720
  211.  
  212. /* VA_WINDOPEN: Gibt an, ob das Fenster geöffnet werden konnte.
  213.  * siehe VA_CONSOLEOPEN
  214.  */
  215. #define VA_WINDOPEN        0x4721
  216.  
  217.  
  218. /* Word 7 in AV_STARTPROG und Word 4 und 7 in VA_PROGSTART sind
  219.  * neu seit dem 29. März 1992.
  220.  */
  221.  
  222. /* AV_STARTPROG: Venus soll ein Programm starten. Hierbei
  223.  * werden die angemeldeten Applikationen der Venus mit
  224.  * berücksichtigt. Man kann also auch eine Datei angeben, für
  225.  * die Venus dann ein Programm sucht.
  226.  * Word 3+4 (Pointer) Programmname mit kompletten Pfad
  227.  * Word 5+6 (Pointer) Kommandozeile (kann NULL sein)
  228.  * Word 7   Beliebiges 16-Bit Wort, das in VA_PROGSTART wieder
  229.  *          zurückgeliefert wird.
  230.  */
  231. #define AV_STARTPROG    0x4722
  232.  
  233. /* VA_PROGSTART: Gibt an, ob Venus das Programm startet.
  234.  * Word 3 == 0: nicht gestartet, != 0 gestartet
  235.  * Im Allgemeinen wird das Acc. im Fehlerfall sofort eine
  236.  * Nachricht bekommen. Wenn das Programm aber gestartet wird, erhält
  237.  * das Acc. diese Nachricht erst nach dem Start des Programms, da
  238.  * die Routine, die den Pexec macht nicht mehr wissen kann, das ein
  239.  * Acc. noch schnell eine Nachricht bekommen muß. Bei einem GEM-
  240.  * Programm, kann man der Erfolg auch an dem AC_CLOSE erkennen.
  241.  * Auch ist die Fehlererkennung nicht optimal. Der Rückgabewert weist
  242.  * auch nicht aus, das das Programm fehlerfrei gelaufen ist.
  243.  *
  244.  * Word 4   Returncode des gestarteten Programms (so vorhanden)
  245.  * Word 7   16-Bit Wort aus AV_STARTPROG
  246.  */
  247. #define VA_PROGSTART    0x4723
  248.  
  249. /* AV_ACCWINDOPEN: Mit dieser Nachricht kann ein Acc Venus mitteilen, daß
  250.  * es ein Fenster geöffnet hat.
  251.  * Word 3 AES-Handle des geöffneten Fensters
  252.  */
  253. #define AV_ACCWINDOPEN    0x4724
  254.  
  255. /* VA_DRAGACCWIND: Venus teilt dem Acc mit, daß Objekte auf eines seiner
  256.  * mittels AV_ACCWINDOPEN angemeldeten Fenster gezogen worden sind.
  257.  * Word 3   AES-Handle des Fensters
  258.  * Word 4   X-Position der Maus
  259.  * Word 5   Y-Position der Maus
  260.  * Word 6+7 Pointer auf einen String, der die Namen der Objekte enthält.
  261.  */
  262. #define VA_DRAGACCWIND    0x4725
  263.  
  264. /* AV_ACCWINDCLOSED: Acc teilt Venus mit, daß sein Fenster geschlossen
  265.  * wurde. Dies braucht das Acc nur in dem Fall zu tun, wenn es selbst das
  266.  * Fenster schließt. Bekommt es eine AC_CLOSE Mitteilung vom AES, so weiß
  267.  * Venus schon, daß alle Fenster weg sind.
  268.  * Word 3   AES-Handle des Fensters
  269.  */
  270. #define AV_ACCWINDCLOSED    0x4726
  271.  
  272.  
  273. /* Neu seit dem 11.04.1991!!!
  274.  */
  275.  
  276. /* AV_COPY_DRAGGED: Accessorie teilt Venus mit, daß die Objekte,
  277.  * die auf sein Fenster gezogen wurden, zu kopieren sind.
  278.  * Dies kann z.B. nach dem Ziehen von Objekten auf das TreeView-
  279.  * Fenster erwünscht sein. Diese Nachricht ist nur als Antwort
  280.  * auf VA_DRAGACCWIND gedacht.
  281.  * Word 3    Tastaturstatus (Alternate, Control, Shift), der bei
  282.  *          der VA_DRAGACCWIND-Nachricht übergeben wurde
  283.  * Word 4+5    Pointer auf einen String, der den Namen des Zielobjektes 
  284.  *            enthält. Dies *muß* ein Pfad sein!
  285.  */
  286. #define AV_COPY_DRAGGED        0x4728
  287.  
  288. /* VA_COPY_COMPLETE: Antwort auf AV_COPY. 
  289.  * Word 3    Status des Kopierens. (!= 0 heißt, daß wirklich etwas
  290.  *            kopiert oder verschoben wurde. Dies kann das Acc evtl.
  291.  *          zum Neuaufbau seines Fensters nutzen.)
  292.  */
  293. #define VA_COPY_COMPLETE    0x4729
  294.  
  295.  
  296. /* AV_PATH_UPDATE: Programm/Accessory teilt Gemini mit, daß sich
  297.  * der Inhalt eines Verzeichnisses geändert hat. Gemini stellt dann
  298.  * dieses Verzeichnis (so ein Fenster davon offen ist) neu dar. Dies
  299.  * wirkt auch auf die Unterverzeichnisse; Update von "C:\" sorgt
  300.  * dafür, daß alles, was mit Laufwerk C:\ zu tun hat, neu eingelesen
  301.  * wird.
  302.  *
  303.  * Word 3+4 Pointer auf den absolten Pfad
  304.  */
  305. #define AV_PATH_UPDATE        0x4730
  306.  
  307.  
  308. /* AV_WHAT_IZIT: Programm/Accessory fragt Gemini, was sich an 
  309.  * Position X/Y auf dem Bildschirm befindet. Die Koordinaten sind
  310.  * normale Pixelkoordinaten mit Ursprung in der linken oberen
  311.  * Bildschirmecke. Antwort ist VA_THAT_IZIT.
  312.  * Word 3   X-Koordinate
  313.  * Word 4   Y-Koordinate
  314.  */
  315. #define AV_WHAT_IZIT        0x4732
  316.  
  317. /* VA_THAT_IZIT:
  318.  * Word 3   ID der zuständigen Applikation
  319.  * Word 4   Typ des Objektes
  320.  * word 5+6 Zeiger auf den Namen des Objektes (oder NULL, falls nicht 
  321.  *          vorhanden)
  322.  *
  323.  * Typ ist wie folgt: (alle anderen für Erweiterungen reserviert.)
  324.  */
  325. #define    VA_OB_UNKNOWN    0        
  326. #define VA_OB_TRASHCAN  1
  327. #define VA_OB_SHREDDER  2
  328. #define VA_OB_CLIPBOARD 3
  329. #define VA_OB_FILE      4
  330. #define VA_OB_FOLDER    5
  331. #define VA_OB_DRIVE        6
  332. #define VA_OB_WINDOW    7
  333.  
  334. #define VA_THAT_IZIT        0x4733
  335.  
  336. /* AV_DRAG_ON_WINDOW: Programm/Accessory teilt Gemini mit, daß 
  337.  * Objekte auf eines seiner mittels AV_WHATIZIT erfragten Fenster 
  338.  * gezogen worden sind. Die Namen sind Namen von Dateien, Ordnern
  339.  * oder Laufwerken, jeweils durch ein Leerzeichen getrennt. Namen
  340.  * von Ordnern oder Laufwerken enden mit einem Backslash.
  341.  *
  342.  * Word 3   AES-Handle des Fensters
  343.  * Word 4   X-Position, wohin die Maus gezogen wurde
  344.  * Word 5   Y-Position, wohin die Maus gezogen wurde
  345.  * Word 6+7 Pointer auf einen String, der die Namen der Objekte enthält.
  346.  *
  347.  * (noch nicht implementiert)
  348.  *
  349.  */
  350. #define AV_DRAG_ON_WINDOW    0x4734
  351.  
  352. /* AV_EXIT: Ein Programm/Accessory teilt Gemini mit, daß es nicht
  353.  * mehr am Protokoll teilnimmt (normalerweisem, weil es beendet
  354.  * wurde).
  355.  * Word 3   AES-ID des Programms/Accessories
  356.  */
  357. #define AV_EXIT                0x4736
  358.  
  359. #endif